#include <stdio.h>
#include <stdlib.h>
#include "sqlist.h"

sqlist* sqlist_creat ()
{
	sqlist *me;		//创建一个 sqlist类型 的指针
	
	me=	malloc(sizeof (*me));		//malloc 函数创建一块 地址空间
	
	if(me == NULL)				//如果成功的话 返回所开辟的空间并且把结构体总的 last值 == -1 表示当前链表中没有数据 							//如果失败 则会返回一个空指针
	return NULL;

	me ->last = -1;
	return me ;

	
}


void sqlist_creat1(sqlist **ptr)	// 	创建一个结构体，无返回值，参数为一个二级指针
{
	

	
	*ptr = malloc (sizeof(**ptr));	//二级指针解引用变为一级指针 把malloc开辟的空间赋给一级指针 如果开辟成功 一级指针肯定不为空，
	
	if(*ptr == NULL)
	{
		return ;

	}
	else
	{
		(*ptr)-> last = -1;
		
		return ;		
	}

	
	
}


int sqlist_distroy(sqlist*me)		//销毁结构体，返回值为一个状态，参数为一个结构体的指针
{
	free(me);
	return 0;
	
}
int  sqlist_add(sqlist*me ,int i,datetype *data) 		//	给链表增加一个数据 参数为链表 位置 和传入的数据类型 返回值为一个状态
{
	int j;
	if (me->last == DATESIZE - 1)
	return -1;
	if (i < 0 || i > me ->last + 1 )
	return -2;
	
	for (j = me ->last; i <= j;j--)
	me ->DATE[j+1] = me->DATE [j];
	
	me->DATE[i] = *data;
	
	me->last++;
	return 0;
}


void sqlist_display(sqlist *me)					//遍历链表
{
	if (me->last == -1  )
	return ;		
		


	
	for (int i =0; i <=  me->last;i++)
	{
		printf("%d ",me->DATE[i]);		
		
	}

		printf("\n");
		return;
	
	
	
	
}

int sqlist_delete(sqlist *me, int i)				// 删除链表中的数据 参数为 链表 和数据的位置 返回值为一个状态
{
    int j =i;
	if(me -> last == DATESIZE)
    return -1;
    if(j <0  || j  > (me ->last +1)) 
    return -2;
	
    for( j = i;j<me->last+1;j++)
    {
         me ->DATE [j] = me ->DATE[j+1];
    }
	me->last--;
	return 0;
}
int sqlist_found(sqlist *me  ,datetype *date)			//查找链表的元素
{
	if(sqlist_isempty(me) == 0)
		return -1;
	
	for(int i =0;i<me->last+1;i++)
    {
        if(*date == me -> DATE[i])
            return i;
        else 
            return -1;


    }
	return 0;
	
}


int sqlist_isempty(sqlist *me)					//查找链表中的元素是否为空
{   
     if(me -> last == -1 )
     return 0;
     else
     return 1;
}   

int sqlist_setempty(sqlist *me)					//将链表元素设置为0					
{

	me-> last = -1;  //将链表的标志设为空
	return 0;
}
int sqlist_getnum(sqlist *me)					//查找链表中有多少个元素
{
	    return (me->last +1) ;
	
	
}
int sqlist_union (sqlist *me0 , sqlist *me1)			//合并两个链表
{
    int i =0;
    for (i = 0; i<=me1 ->last;i++)
    {
        sqlist_add (me0,me0 ->last , &me1 ->DATE[i]);
    }
	
	return 0;
}



